package OOA.com.JavaBasis.inherit;
/*
* 方法的重写和重载
*
*
* 重写
* 1.发生在有继承关系的父子类中
* 2.要发生重写，必须方法名相同，参数列表相同
* 3.子类重写的方法，父类的返回值类型如果是void/8种基本数据类型，必须保持一致
*                父类的返回值类型如果是引用数据类型，子类的重写方法可以返回父类类型或者父类的子类型
* 4.修饰词：如果父类的修饰词是public，子类也一定是public，子类的修饰词权限要>=父类的修饰词权限
* =======重写遵循“运行期绑定”
*
* 重载
*1.发生在一个类中
*2.发生重载，方法名要相同，参数列表要不同
*3.对返回值类型没有要求
*4.对修饰词五要求
* ========重载遵循“编译器绑定”
*
* */
public class OverLoadAndOverride {
    public static void main(String[] args) {
        Super obj = new Sub();//这种创建对象方法叫向上造型
        obj.f();
        System.out.println("========================");
        Goo goo = new Goo();
        goo.g(obj);
    }
}
class Super{
    public void f(){
        System.out.println("super.f()");
    }
}
class Sub extends Super{
    @Override
    public void f(){
        System.out.println("sub.f()");
    }
}
class Goo{
    public void g(Super obj){
        System.out.println("super.f()");
    }
    public void g(Sub obj){
        System.out.println("sub.f()");
    }
}